package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.AcScheduleStatistics;

/**
 * 排课结果统计Service接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IAcScheduleStatisticsService 
{
    /**
     * 查询排课结果统计
     * 
     * @param statisticsId 排课结果统计主键
     * @return 排课结果统计
     */
    public AcScheduleStatistics selectAcScheduleStatisticsById(Long statisticsId);

    /**
     * 查询排课结果统计列表
     * 
     * @param acScheduleStatistics 排课结果统计
     * @return 排课结果统计集合
     */
    public List<AcScheduleStatistics> selectAcScheduleStatisticsList(AcScheduleStatistics acScheduleStatistics);

    /**
     * 新增排课结果统计
     * 
     * @param acScheduleStatistics 排课结果统计
     * @return 结果
     */
    public int insertAcScheduleStatistics(AcScheduleStatistics acScheduleStatistics);

    /**
     * 修改排课结果统计
     * 
     * @param acScheduleStatistics 排课结果统计
     * @return 结果
     */
    public int updateAcScheduleStatistics(AcScheduleStatistics acScheduleStatistics);

    /**
     * 批量删除排课结果统计
     * 
     * @param statisticsIds 需要删除的排课结果统计主键集合
     * @return 结果
     */
    public int deleteAcScheduleStatisticsByIds(Long[] statisticsIds);

    /**
     * 删除排课结果统计信息
     * 
     * @param statisticsId 排课结果统计主键
     * @return 结果
     */
    public int deleteAcScheduleStatisticsById(Long statisticsId);

    /**
     * 根据任务ID查询统计信息
     * 
     * @param taskId 任务ID
     * @return 统计信息
     */
    public AcScheduleStatistics selectStatisticsByTaskId(Long taskId);

    /**
     * 根据学期查询统计列表
     * 
     * @param semester 学期
     * @return 统计列表
     */
    public List<AcScheduleStatistics> selectStatisticsBySemester(String semester);

    /**
     * 查询最近的统计记录
     * 
     * @param limit 限制数量
     * @return 统计列表
     */
    public List<AcScheduleStatistics> selectRecentStatistics(Integer limit);

    /**
     * 根据任务ID删除统计信息
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    public int deleteStatisticsByTaskId(Long taskId);

    /**
     * 批量根据任务ID删除统计信息
     * 
     * @param taskIds 任务ID数组
     * @return 结果
     */
    public int deleteStatisticsByTaskIds(Long[] taskIds);

    /**
     * 创建或更新统计信息
     * 
     * @param taskId 任务ID
     * @param semester 学期
     * @param totalCourses 总课程数
     * @param scheduledCourses 已排课程数
     * @param conflictCount 冲突数量
     * @return 结果
     */
    public boolean createOrUpdateStatistics(Long taskId, String semester, Integer totalCourses, 
                                          Integer scheduledCourses, Integer conflictCount);

    /**
     * 更新算法执行统计
     * 
     * @param taskId 任务ID
     * @param iterationCount 迭代次数
     * @param executionTime 执行时间（毫秒）
     * @return 结果
     */
    public boolean updateAlgorithmStatistics(Long taskId, Integer iterationCount, Long executionTime);

    /**
     * 获取学期统计摘要
     * 
     * @param semester 学期
     * @return 统计摘要
     */
    public AcScheduleStatistics getSemesterSummary(String semester);
}